package tool.code.generater;

import tool.code.generater.util.CommonUtil;

import java.util.LinkedHashMap;
import java.util.Map;

public class TypeMapper {
    private final Map<String, DataType> typeMapping = new LinkedHashMap<>();
    private final Map<String, String> rawTypeMapping;

    public TypeMapper(String configFilePath) {
        // 读取 JSON 配置文件并转换为 Map
        rawTypeMapping = CommonUtil.fromFileToObject(configFilePath, Map.class);
        init();
    }

    private void init() {
        rawTypeMapping.forEach((jdbcType, javaType) -> {
            // 分割 Java 类型和包名
            String[] parts = javaType.split("\\.");
            String javaTypeName = parts[parts.length - 1];
            if (parts.length == 1) {
                typeMapping.put(jdbcType, new DataType(jdbcType, javaTypeName, null));
                return;
            }
            // 创建 DataType 对象并添加到映射中
            typeMapping.put(jdbcType, new DataType(jdbcType, javaTypeName, javaType));
        });
    }

    public DataType getJavaType(String jdbcType) {
        // 根据输入类型查找映射的目标类型
        return typeMapping.getOrDefault(jdbcType, null);
    }
}    